import PigProcurementPlanApi from '../../../common/api/food/pigprocurementplan.api.js';
import OrderBillsApi from '../../../common/api/breedsales/orderbills.api.js';

const MasterDataUrl = Utils.CurDomain.MasterDataUrl;
const PartnerSvcUrl = Utils.CurDomain.PartnerSvcUrl;

let _vm;

(function(window, document, $) {
	$(async function() {
		_vm = new Vue({
			el: "#add-procurement-plan-form",
			data() {
				return {
					"company": {
						"id": "",
						"name": ""
					},
					"customer": {
						"id": "",
						"name": ""
					},
					"pigTypeName": "",
					"pigTypeId": "",
					"pigTypeNumcode": "",
					"pigTypeBaseUnit": "",
					"pigTypeAuxUnit": "",
					"number": null,
					// "bizDate": moment(new Date()).format('YYYY-MM-DD'),
					"bizDate": '',
					"remark": ""
				}
			}
		});
		$('body').attr('data-weui-theme', 'light'); // 强制光明模式
		await _initCommand();
		clickFun();
	});

	// 初始化数据
	const _initCommand = async () => {
		// 公司
		await PigProcurementPlanApi.getOrgInfo('ooca', 10).then(res => {
			$('#company').select2({
				placeholder: '请选择公司...', //默认文字提示
				language: "zh-CN", //汉化
				allowClear: true, //允许清空
				width: '100%',
				dropdownAutoWidth: true,
				data: res.map(item => {
					return {
						id: item.id,
						text: `${item.name}(${item.numCode})`,
						name: item.name
					}
				}),
			});

			// Select2 初始化后，检查是否有默认选中的值
			setTimeout(function() {
				const currentValue = $('#company').val();
				const currentData = $('#company').select2('data')[0];
				console.log('Select2 初始化后的当前值:', currentValue);
				console.log('Select2 初始化后的当前数据:', currentData);

				// 如果有选中值，同步到 Vue
				if (currentValue && currentData) {
					_vm.company.id = currentData.id;
					_vm.company.name = currentData.name;
					console.log('已同步初始值到 Vue - ID:', _vm.company.id, 'Name:', _vm.company
						.name);
				}
			}, 100);
		});

		// 选择公司事件 - 使用 change 事件更可靠
		$('#company').on('change', function(e) {
			console.log('公司 change 事件触发');
			const selectedValue = $(this).val();
			const selectedText = $(this).find('option:selected').text();
			const selectedData = $(this).select2('data')[0];

			console.log('selectedValue:', selectedValue);
			console.log('selectedText:', selectedText);
			console.log('selectedData:', selectedData);

			if (selectedData) {
				_vm.company.id = selectedData.id;
				_vm.company.name = selectedData.name;
				console.log('已设置 Vue 数据 - ID:', _vm.company.id, 'Name:', _vm.company.name);
			}
		});

		// 同时监听 select2:select 事件作为备用
		$('#company').on('select2:select', function(e) {
			console.log('select2:select 事件触发');
			console.log('e.params:', e.params);
			if (e.params && e.params.data) {
				const selectedData = e.params.data;
				console.log('从 e.params.data 获取:', selectedData);
				_vm.company.id = selectedData.id;
				_vm.company.name = selectedData.name;
				console.log('已设置 Vue 数据 - ID:', _vm.company.id, 'Name:', _vm.company.name);
			}
		});

		// 公司下拉菜单打开时调整宽度
		$('#company').on('select2:open', function(e) {
			var adjustDropdownWidth = function() {
				var $container = $('#company').next('.select2-container');
				var containerWidth = $container.outerWidth();
				// 找到当前打开的下拉菜单
				var $dropdown = $('.select2-container--open').find('.select2-dropdown');
				if ($dropdown.length === 0) {
					// 如果没找到，尝试查找body下的下拉菜单
					$dropdown = $('body > .select2-container--open .select2-dropdown');
					if ($dropdown.length === 0) {
						$dropdown = $('.select2-dropdown:visible');
					}
				}
				if ($dropdown.length > 0 && containerWidth > 0) {
					$dropdown.css({
						'width': containerWidth + 'px',
						'min-width': containerWidth + 'px',
						'max-width': containerWidth + 'px'
					});
				}
			};

			// 立即调整一次
			setTimeout(adjustDropdownWidth, 0);
			// 确保数据渲染完成后再调整
			setTimeout(adjustDropdownWidth, 50);
		});

		// 客户
		$('#customer').select2({
			allowClear: true,
			language: "zh-CN",
			placeholder: '请选择客户...', // 默认文字提示
			width: '100%',
			ajax: {
				url: `${MasterDataUrl}/yycustomers/by/q`,
				dataType: 'json',
				type: 'GET',
				beforeSend: Utils.AjaxBeforeSend,
				data: function(params) {
					return {
						pageSize: 10,
						pageIndex: (params.page || 1) - 1,
						...(Utils.IsNotNull(params.term) ? {
							SearchInfo: params.term
						} : {})
					};
				},
				cache: true,
				delay: 700, // 等待用户输入完后的 在等700毫秒 进行搜索
				processResults: function(data, params) {
					params.page = params.page || 1;
					let _data = data.data.items.map(item => {
						item.text = `${item.name}(${item.numCode})`;
						return item;
					});
					return {
						results: _data, // 后台返回的数据集
						pagination: {
							more: params.page < data.data.totalPages
						}
					};
				},
				"error": async function(xhr, textStatus, errorThrown) {
					await Utils.AjaxError(xhr, textStatus, errorThrown);
				}
			}
		});
		$('#customer').setSelectValue();

		// 客户下拉菜单宽度调整函数
		var adjustCustomerDropdownWidth = function() {
			var $container = $('#customer').next('.select2-container');
			var containerWidth = $container.outerWidth();

			// 尝试多种方式查找下拉框
			var $dropdown = $('.select2-container--open .select2-dropdown').last();
			if ($dropdown.length === 0) {
				$dropdown = $('.select2-dropdown:visible').last();
			}
			if ($dropdown.length === 0) {
				$dropdown = $('body > .select2-dropdown:visible');
			}

			if ($dropdown.length > 0 && containerWidth > 0) {
				$dropdown.css({
					'width': containerWidth + 'px',
					'min-width': containerWidth + 'px',
					'max-width': containerWidth + 'px'
				});
			}
		};

		// 监听下拉框打开事件
		$('#customer').on('select2:open', function(e) {
			// 立即调整
			setTimeout(adjustCustomerDropdownWidth, 0);
			setTimeout(adjustCustomerDropdownWidth, 50);
		});

		// 监听 ajax 结果加载完成事件（关键！）
		$('#customer').on('select2:results', function(e) {
			// 数据加载完成后调整宽度
			setTimeout(adjustCustomerDropdownWidth, 0);
			setTimeout(adjustCustomerDropdownWidth, 50);
			setTimeout(adjustCustomerDropdownWidth, 100);
		});

		// 选择客户
		$('#customer').on('select2:select', function(e) {
			let res = $('#customer').select2('data')[0];
			_vm.customer.id = res?.id;
			_vm.customer.name = res?.name;
		});

		// 生猪品类 - 获取所有物料并过滤
		try {
			// 使用 OrderBillsApi 获取物料数据
			const allMaterial = await OrderBillsApi.postMaterial();

			// 过滤出编码以"14"开头的物料（生猪品类）
			const pigMaterials = allMaterial.items.filter(item =>
				item.numCode && item.numCode.substring(0, 2) === '14'
			);

			$('#pigType').select2({
				allowClear: true,
				language: "zh-CN",
				placeholder: '请选择生猪品类...', // 默认文字提示
				width: '100%',
				data: pigMaterials.map(item => ({
					id: item.id,
					text: `${item.name}(${item.numCode})`,
					name: item.name,
					numCode: item.numCode,
					baseMeasureUnit: item.baseMeasureUnit,
					subMeasureUnit: item.subMeasureUnit
				}))
			});
			$('#pigType').setSelectValue();
		} catch (error) {
			console.error('获取物料数据失败:', error);
			// 如果获取失败，降级为ajax方式
			$('#pigType').select2({
				allowClear: true,
				language: "zh-CN",
				placeholder: '请选择生猪品类...', // 默认文字提示
				width: '100%',
				ajax: {
					url: `${MasterDataUrl}/yymaterials/q`,
					dataType: 'json',
					type: 'GET',
					beforeSend: Utils.AjaxBeforeSend,
					data: function(params) {
						return {
							MGroupId: 'SAP-1',
							PageSize: 10,
							PageIndex: (params.page || 1) - 1,
							...(Utils.IsNotNull(params.term) ? {
								SearchInfo: params.term
							} : {})
						};
					},
					cache: true,
					delay: 700,
					processResults: function(data, params) {
						params.page = params.page || 1;
						let _data = data.items.filter(item =>
							item.numCode && item.numCode.substring(0, 2) === '14'
						).map(item => {
							item.text = `${item.name}(${item.numCode})`;
							return item;
						});
						return {
							results: _data,
							pagination: {
								more: params.page < data.totalPages
							}
						};
					},
					"error": async function(xhr, textStatus, errorThrown) {
						await Utils.AjaxError(xhr, textStatus, errorThrown);
					}
				}
			});
			$('#pigType').setSelectValue();

			// 生猪品类下拉菜单宽度调整函数（ajax 模式）
			var adjustPigTypeDropdownWidth = function() {
				var $container = $('#pigType').next('.select2-container');
				var containerWidth = $container.outerWidth();
				var $dropdown = $('.select2-container--open .select2-dropdown').last();
				if ($dropdown.length === 0) {
					$dropdown = $('.select2-dropdown:visible').last();
				}
				if ($dropdown.length > 0 && containerWidth > 0) {
					$dropdown.css({
						'width': containerWidth + 'px',
						'min-width': containerWidth + 'px',
						'max-width': containerWidth + 'px'
					});
				}
			};

			// 监听下拉框打开事件
			$('#pigType').on('select2:open', function(e) {
				setTimeout(adjustPigTypeDropdownWidth, 0);
				setTimeout(adjustPigTypeDropdownWidth, 50);
			});

			// 监听 ajax 结果加载完成事件
			$('#pigType').on('select2:results', function(e) {
				setTimeout(adjustPigTypeDropdownWidth, 0);
				setTimeout(adjustPigTypeDropdownWidth, 50);
				setTimeout(adjustPigTypeDropdownWidth, 100);
			});
		}

		// 生猪品类下拉菜单打开时调整宽度（静态数据模式）
		$('#pigType').on('select2:open', function(e) {
			var adjustDropdownWidth = function() {
				var $container = $('#pigType').next('.select2-container');
				var containerWidth = $container.outerWidth();
				var $dropdown = $('.select2-container--open .select2-dropdown').last();
				if ($dropdown.length === 0) {
					$dropdown = $('.select2-dropdown:visible').last();
				}
				if ($dropdown.length > 0 && containerWidth > 0) {
					$dropdown.css({
						'width': containerWidth + 'px',
						'min-width': containerWidth + 'px',
						'max-width': containerWidth + 'px'
					});
				}
			};

			// 立即调整
			setTimeout(adjustDropdownWidth, 0);
			setTimeout(adjustDropdownWidth, 50);
		});

		// 选择生猪品类
		$('#pigType').on('select2:select', function(e) {
			let res = $('#pigType').select2('data')[0];
			_vm.pigTypeId = res?.id;
			_vm.pigTypeName = res?.name;
			_vm.pigTypeNumcode = res?.numCode;
			_vm.pigTypeBaseUnit = res?.baseUnit || '';
			_vm.pigTypeAuxUnit = res?.auxUnit || '';
		});

		// 选择业务日期
		$('#search-date').on('click', function() {
			pick();
		});

		// 编辑模式
		let id = getUrlKey("id");
		if (Utils.IsNotNull(id)) {
			document.title = '生猪采购计划 - 编辑';
			// TODO: 加载编辑数据
			// await PigProcurementPlanApi.getPigPurchasePlanDetail(id).then(res => {
			//     // 回填数据
			// });
		}
	}

	// 操作函数
	const clickFun = async () => {
		// 取消按钮，返回列表
		$(document).on('click', '#returnMain', function() {
			location.href = `../certregs/pigprocurementplan.html?v=${Utils.GetTime()}`;
		});

		// 提交数据
		$('#informationSubmit').on("click", function(e) {
			// 表单验证
			console.log('=== 提交验证 ===');
			console.log('公司数据:', _vm.company);
			console.log('公司ID:', _vm.company.id);
			console.log('公司名称:', _vm.company.name);
			console.log('Utils.IsNotNull结果:', Utils.IsNotNull(_vm.company.id));

			if (!Utils.IsNotNull(_vm.company.id)) {
				console.log('验证失败: 公司ID为空');
				return $.toptip(`请选择公司!`, 'warning');
			}
			if (!Utils.IsNotNull(_vm.customer.id)) {
				return $.toptip(`请选择客户!`, 'warning');
			}
			if (!Utils.IsNotNull(_vm.pigTypeId)) {
				return $.toptip(`请选择生猪品类!`, 'warning');
			}
			if (!Utils.IsNotNull(_vm.number) || _vm.number <= 0) {
				return $.toptip(`请输入正确的数量!`, 'warning');
			}
			if (!Utils.IsNotNull(_vm.bizDate)) {
				return $.toptip(`请选择业务日期!`, 'warning');
			}

			savetips();
		});
	}

	// 保存
	const savetips = () => {
		$.modal({
			autoClose: false,
			title: '提示',
			text: `<div class="weui-cells__group weui-cells__group_form" style="margin-top:-5px">
                    <div class="addedientry" style="padding:5px;display:flex;justify-content: center; padding-bottom: 20px;">
                        <div class="addentry">是否确认保存该单据？</div>
                    </div>
                </div>`,
			buttons: [{
					text: "取消",
					className: "default",
					onClick: function() {
						$.closeModal();
					}
				},
				{
					text: "确定",
					onClick: function() {
						$.closeModal();

						const data = {
							"company": {
								"id": _vm.company.id,
								"name": _vm.company.name
							},
							"customer": {
								"id": _vm.customer.id,
								"name": _vm.customer.name
							},
							"pigTypeName": _vm.pigTypeName,
							"pigTypeId": _vm.pigTypeId,
							"pigTypeNumcode": _vm.pigTypeNumcode,
							"pigTypeBaseUnit": _vm.pigTypeBaseUnit,
							"pigTypeAuxUnit": _vm.pigTypeAuxUnit,
							"number": parseInt(_vm.number),
							"remark": _vm.remark,
							"bizDate": _vm.bizDate
						};

						let id = getUrlKey("id");
						if (Utils.IsNotNull(id)) {
							// 编辑模式 - 更新
							// TODO: 实现更新接口
							$.toptip('编辑功能待实现', 'warning');
						} else {
							// 新增模式 - 创建
							PigProcurementPlanApi.createPigPurchasePlan(data).then(res => {
								$.toptip('保存成功!', 'success');
								setTimeout(function() {
									location.href = `./pigprocurementplan.html`;
								}, 1000);
							}, err => {
								$.toptip(err.responseJSON?.msg || '保存失败', 'error');
							});
						}
					}
				}
			]
		});
	}

	// 时间选择器
	const pick = () => {
		weui.datePicker({
			defaultValue: (moment(new Date()).format('YYYY-MM-DD')).split('-'),
			className: 'mypick',
			onConfirm: async function(result) {
				let value = `${result[0].value}-${result[1].value}-${result[2].value}`;
				_vm.bizDate = moment(new Date(value)).format('YYYY-MM-DD');
			}
		});
	}

	// 获取地址栏的参数
	const getUrlKey = (name) => {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		var r = window.location.search.substr(1).match(reg);
		if (r != null) return unescape(r[2]);
		return null;
	}

	// 解决字段过长问题
	const cutstr = (str, len) => {
		var str_length = 0;
		var str_len = 0;
		var str_cut = new String();
		str_len = str.length;
		for (var i = 0; i < str_len; i++) {
			var a = str.charAt(i);
			str_length++;
			if (escape(a).length > 4) {
				// 中文字符的长度经编码之后大于4
				str_length++;
			}
			str_cut = str_cut.concat(a);
			if (str_length >= len) {
				str_cut = str_cut.concat("...");
				return str_cut;
			}
		}
		// 如果给定字符串小于指定长度，则返回源字符串；
		if (str_length < len) {
			return str;
		}
	}

})(window, document, jQuery)